package comxyp.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import comxyp.domain.Employee;
import comxyp.domain.Msg;
import comxyp.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/employee")
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;
    @RequestMapping(value = "/save")
    @ResponseBody
    public String save() throws IOException {
        /*设置视图  就是需要跳到的页面*/
        return "部门列表";//重定向到我们查询列表页面

    }
    /*
    把数据转换为json格式
    导入jackson包 把我们数据转换为json格式
    *
    * */
    @RequestMapping("/findAllJson")
    @ResponseBody
    public Msg getWithJson(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
        //引入分页插件PageHelper
        PageHelper.startPage(pn,5);
        //startPage后面紧跟这个查询就是一个分页查询
        List<Employee> employeeList = employeeService.findAll();//获取数据
        //使用pageInfo包装查询函后的结果，只需要将pageInfo交给页面就行了
        PageInfo page = new PageInfo(employeeList,5);
        return  Msg.success().add("pageInfo",page);
    }
    //按id查询员工信息
    @RequestMapping(value = "/findById",method = RequestMethod.GET)
    @ResponseBody
    public Msg findById(@RequestParam("emp_id") int emp_id){
        Employee employee = employeeService.findById(emp_id);
        return Msg.success().add("data",employee);
    }
    @RequestMapping("/findAll")
    @ResponseBody
    public String findAll(@RequestParam(value = "pn",defaultValue = "1") Integer pn,Model model) throws IOException {
        //引入分页插件PageHelper
        PageHelper.startPage(pn,5);
        //startPage后面紧跟这个查询就是一个分页查询
        List<Employee> employeeList = employeeService.findAll();//获取数据
        //使用pageInfo包装查询函后的结果，只需要将pageInfo交给页面就行了
        //封装了详细的分页详细，包括有我们查询出来的数据，传入连续显示的页数
        PageInfo page = new PageInfo(employeeList,5);
       // 设置模型
        model.addAttribute("pages",page);//把数据存储到视图对象中
        return "emp_list";
    }
    /*按用户名查询  检查用户名是否可用*/
    @RequestMapping("/existUserName")
    @ResponseBody
    /*获取到用户名参数  这个参数是在index.jsp校验用户名是否可用中  从用户输入框中传过来值*/
    public Msg existUserName(@RequestParam("name") String name){
        //先判断用户名是否合法
        String regx = "(^[a-zA-Z0-9_-]{3,16}$)|(^[\\u2E80-\\u9FFF]{2,5})";
        if(!name.matches(regx)){
            return Msg.fail().add("va_msg","用户需要是2-5位中文或者3-16位英文组合");
        }
        boolean boo = employeeService.findName(name);
        if(boo){
            return Msg.success();
        } else {
            return Msg.fail().add("va_msg","用户名不可用");
        }
    }
    @RequestMapping("/add")
    public String add(Employee employee) throws IOException {
        employeeService.adds(employee);
        return "redirect:/employee/findAll";//重定向到我们查询列表页面
    }
    /*添加数据 用ajax请求方式*/
    @RequestMapping(value = "/addJson",method = RequestMethod.POST)
    @ResponseBody
    public Msg addJson(Employee employee) throws IOException {
        employeeService.adds(employee);
        return Msg.success();
    }
    /*修改数据 用ajax请求方式*/
    /*我们使用PUT方法要去web.xml中进行过滤器配置 HttpPutFormContentFilter*/
    @RequestMapping(value = "/update/{emp_id}",method = RequestMethod.PUT)
    @ResponseBody
    public Msg update(Employee employee) throws IOException {
        employeeService.update(employee);
        return Msg.success();
    }

    @RequestMapping(value = "/deleteAll",method = RequestMethod.GET)

    /*通过@ResponseBody 注解 将返回的json字符串放入响应体response中，
    然后前台js才能拿到json字符串并进行解析。如果不加，响应体中就没有放入json字符串，
    前台自然是拿不到数据的*/
    @ResponseBody
    public Msg deleteAll(@RequestParam("emp_ids") String emp_ids) throws IOException {
        //删除
        List<Integer> del_ids = new ArrayList<>();
        String[] str_ids = emp_ids.split(" ");
        //组织id集合
        for(String s:str_ids){
            del_ids.add(Integer.parseInt(s.trim()));
        }
        employeeService.deleteAll(del_ids);
        return Msg.success();
    }
    @RequestMapping(value = "/delete",method = RequestMethod.GET)
    @ResponseBody
    /*通过@ResponseBody 注解 将返回的json字符串放入响应体response中，
    然后前台js才能拿到json字符串并进行解析。如果不加，响应体中就没有放入json字符串，
    前台自然是拿不到数据的*/
    public Msg delete(@RequestParam("emp_id") Integer emp_id) throws IOException {
        employeeService.delete(emp_id);
        return Msg.success();
    }
}
